A typical computer system includes a number of hardware devices, each of which needs to be controlled. Such devices are typically controlled by low-level control programs (sometimes referred to as firmware) embedded in microprogrammable processors. As used herein, the term “computer system” refers to any system that includes at least one processor. Thus, a computer system according to embodiments of the present invention includes personal computers, mainframes, PDAs (Personal Digital Assistants), and associated peripherals and hardware components relating to the operation of the systems. A computer system according to embodiments of the present invention may be embedded in a appliance, a desk-top box or in any other kinds of device. The peripherals may include external memory devices such as memory cards, disks, and the like; video and audio input and output devices; printers and the like. The hardware components include power supplies, various types of busses; fans, disk drives, sensors, flash parts and the like.
Firmware is typically stored in a non-volatile type of storage such as a flash memory, but embodiments of the present invention are not limited thereto. Instead the firmware may alternatively be stored in a read-only memory (ROM), non-volatile RAM (NVRAM), etc.
In most computer systems, firmware is highly customized to the specific hardware device it operates/controls. Accordingly, when hardware is changed and/or added to a computer system, the firmware usually has to be changed. The inventors of the present invention were the first to realize that, instead of installing new or updated firmware every time hardware in a computer system is modified (added, changed, removed, upgraded), a single firmware program may be developed to deal with and adapt to unanticipated/changing hardware environments.
In order to provide essentially generic firmware, according to one aspect of the present invention, first hardware devices are categorized and generalized according to their overall function. There are a finite number of general types of peripheral devices (such as, e.g., power supplies, fans, disk drives, sensors, flash parts, etc.). Next, it is preferable to distinguish between devices physical aspects and their logical aspects. In this manner, both physical and logical descriptions of generic devices may be obtained or derived. A complete hardware device description may be obtained using a logical description with a corresponding physical description.
With the physical and logical device descriptions for various types of devices, a common firmware prototype can be derived which supports the generalizations regarding the particular device types. This prototype is then parameterized to support the various actual devices with which it might be used. To begin with, the implementation of this prototype can be stubbed to implement a virtual/non-existent peripheral device (of the type in question).
The general types of peripheral hardware devices recognized reflect the range of intended applicability for the given embedded software/firmware part. The part, may be, for example, one that implements some form of hardware manageability logic on some sort of embedded microcontroller. In this case, the peripheral devices will tend to be things like sensors (for temperature, voltage, current, chassis-intrusion, etc.), fans, LEDs (light-emitting diodes), and the like. Of course, the present invention is not limited to any particular set of recognized peripheral devices.
As noted above, a complete description of a peripheral hardware environment includes both a logical and a physical description, (a physical description is paired with a corresponding logical description to provide a complete description). The physical description may include things like the number and assignment of output pins on a chip, the memory locations of certain data, various clock and timing parameters, temperature parameters and the like.
FIG. 1 depicts an exemplary conceptual architecture according to embodiments of the present invention. The figure depicts the division of the component scheme into a logical and physical portion. It depicts the use of a common default/prototype interface and the use of a complementary physical level scheme. Together, the logical scheme and the physical scheme form a complete description of a given instance of the component prototype.
For the sake of simplicity, this figure omits the ability of any given component to be composed of an arbitrary assembly of subordinate components.